// 思路，使用两个队列实现栈

function MyStack() {
    this.queue1 = []
    this.queue2 = []
}

MyStack.prototype.push = function (val) {
    this.queue1.push(val)
}

// 移除栈顶
MyStack.prototype.pop = function () {
    if (!this.queue1.length) {
        [this.queue1, this.queue2] = [this.queue2, this.queue1];
    }
    // 把先进来的放到了队列的前面
    while (this.queue1.length > 1) {
        this.queue2.push(this.queue1.shift())
    }
    return this.queue1.shift()
}

MyStack.prototype.top = function () {
    let res = this.pop()
    this.queue1.push(res)
    return res
}

MyStack.prototype.empty = function () {
    return !this.queue1.length && !this.queue2.length
}

// 思路2， 用一个队列实现

function MyStack2() {
    this.queue = []
}

MyStack2.prototype.push = function (val) {
    this.queue.push(val)
}

MyStack2.prototype.pop = function () {
    let size = this.queue.length
    // 把队列的最后一个进来的元素放到了队首，其余的重新入队
    while (size-- > 1) {
        this.queue.push(this.queue.shift())
    }
    return this.queue.shift()
}

MyStack2.prototype.top = function () {
    let res = this.pop()
    this.queue.push(res)
    return res
}

MyStack2.prototype.empty = function () {
    return !this.queue.length
}